import axios from 'axios'
import { ElMessage } from 'element-plus'
import router from '@/router'
import useUserStore from '@/stores/user'

const instance = axios.create({
  baseURL: '/ftyyptapi',
  timeout: 3000,
})

// 请求拦载器
// 背景：后台管理系统除了登录接口不需要token以外，所有的接口请求时都需要token，后端需要知道你是谁？
// 每次ajax请求时，都要把token放入请求头中交给后端，后端可以拿到token，知道你是谁了
// 一般代码这样写
// config.headers.Authorization = "Bearer token字符串"

// 当前项目：
// config.headers.token = token字符串

instance.interceptors.request.use(
  config => {
    // 在请求时，把token放入请求报文中的请求头token中
    const user = useUserStore()
    const token = user.userinfo.token

    if (token) {
      config.headers.token = token
    }

    return config
  },
  error => {
    return Promise.reject(error)
  },
)

// 响应拦载器
instance.interceptors.response.use(
  response => {
    // 成功响应
    if (!response.data.state.toString().startsWith('2')) {
      // 业务发生了错误
      // 1.跳转到登录页
      router.push('/login')
      // 2.给出错误提示
      ElMessage.error(response.data.msg)
      // return 异常
      return Promise.reject(response.data)
    } else {
      return response
    }
  },
  error => {
    // 失败响应  error.response.status === 4   5
    return Promise.reject(error)
  },
)

export default instance
